/*!
 KeyTable 2.1.0
 ©2009-2015 SpryMedia Ltd - datatables.net/license
*/
(function(e){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(k){return e(k,window,document)}):"object"===typeof exports?module.exports=function(k,j){k||(k=window);if(!j||!j.fn.dataTable)j=require("datatables.net")(k,j).$;return e(j,k,k.document)}:e(jQuery,window,document)})(function(e,k,j,n){var g=e.fn.dataTable,l=function(a,b){if(!g.versionCheck||!g.versionCheck("1.10.8"))throw"KeyTable requires DataTables 1.10.8 or newer";this.c=e.extend(!0,{},g.defaults.keyTable,
l.defaults,b);this.s={dt:new g.Api(a),enable:!0};this.dom={};var d=this.s.dt.settings()[0],c=d.keytable;if(c)return c;d.keytable=this;this._constructor()};e.extend(l.prototype,{blur:function(){this._blur()},enable:function(a){this.s.enable=a},focus:function(a,b){this._focus(this.s.dt.cell(a,b))},focused:function(a){if(!this.s.lastFocus)return!1;var b=this.s.lastFocus.index();return a.row===b.row&&a.column===b.column},_constructor:function(){this._tabInput();var a=this,b=this.s.dt,d=e(b.table().node());
"static"===d.css("position")&&d.css("position","relative");e(b.table().body()).on("click.keyTable","th, td",function(){if(!1!==a.s.enable){var c=b.cell(this);c.any()&&a._focus(c)}});e(j.body).on("keydown.keyTable",function(b){a._key(b)});if(this.c.blurable)e(j.body).on("click.keyTable",function(c){e(c.target).parents(".dataTables_filter").length&&a._blur();e(c.target).parents().filter(b.table().container()).length||e(c.target).parents("div.DTE").length||a._blur()});if(this.c.editor)b.on("key.kt",
function(b,d,e,h,i){a._editor(e,i)});if(b.settings()[0].oFeatures.bStateSave)b.on("stateSaveParams.keyTable",function(b,d,e){e.keyTable=a.s.lastFocus?a.s.lastFocus.index():null});b.on("destroy.keyTable",function(){b.off(".keyTable");e(b.table().body()).off("click.keyTable","th, td");e(j.body).off("keydown.keyTable").off("click.keyTable")});(d=b.state.loaded())&&d.keyTable?b.cell(d.keyTable).focus():this.c.focus&&b.cell(this.c.focus).focus()},_blur:function(){if(this.s.enable&&this.s.lastFocus){var a=
this.s.lastFocus;e(a.node()).removeClass(this.c.className);this.s.lastFocus=null;this._emitEvent("key-blur",[this.s.dt,a])}},_columns:function(){var a=this.s.dt,b=a.columns(this.c.columns).indexes(),d=[];a.columns(":visible").every(function(a){-1!==b.indexOf(a)&&d.push(a)});return d},_editor:function(a,b){var d=this.s.dt,c=this.c.editor;b.stopPropagation();c.inline(this.s.lastFocus.index());var f=e("div.DTE input");f.length&&f[0].select();d.keys.enable("navigation-only");d.one("key-blur.editor",function(){c.displayed()&&
c.submit()});c.one("close",function(){d.keys.enable(!0);d.off("key-blur.editor")})},_emitEvent:function(a,b){this.s.dt.iterator("table",function(d){e(d.nTable).triggerHandler(a,b)})},_focus:function(a,b){var d=this,c=this.s.dt,f=c.page.info(),m=this.s.lastFocus;if(this.s.enable){if("number"!==typeof a){var h=a.index(),b=h.column,a=c.rows({filter:"applied",order:"applied"}).indexes().indexOf(h.row);f.serverSide&&(a+=f.start)}if(-1!==f.length&&(a<f.start||a>=f.start+f.length))c.one("draw",function(){d._focus(a,
b)}).page(Math.floor(a/f.length)).draw(!1);else if(-1!==e.inArray(b,this._columns())){f.serverSide&&(a-=f.start);f=c.cell(":eq("+a+")",b,{search:"applied"});if(m){if(m.node()===f.node())return;this._blur()}m=e(f.node());m.addClass(this.c.className);this._scroll(e(k),e(j.body),m,"offset");h=c.table().body().parentNode;h!==c.table().header().parentNode&&(h=e(h.parentNode),this._scroll(h,h,m,"position"));this.s.lastFocus=f;this._emitEvent("key-focus",[this.s.dt,f]);c.state.save()}}},_key:function(a){if(this.s.enable&&
!(0===a.keyCode||a.ctrlKey||a.metaKey||a.altKey)){var b=this.s.lastFocus;if(b){var d=this,c=this.s.dt;if(!(this.c.keys&&-1===e.inArray(a.keyCode,this.c.keys)))switch(a.keyCode){case 9:this._shift(a,a.shiftKey?"left":"right",!0);break;case 27:this.s.blurable&&!0===this.s.enable&&this._blur();break;case 33:case 34:a.preventDefault();var f=c.cells({page:"current"}).nodes().indexOf(b.node());c.one("draw",function(){var a=c.cells({page:"current"}).nodes();d._focus(c.cell(f<a.length?a[f]:a[a.length-1]))}).page(33===
a.keyCode?"previous":"next").draw(!1);break;case 35:case 36:a.preventDefault();b=c.cells({page:"current"}).indexes();this._focus(c.cell(b[35===a.keyCode?b.length-1:0]));break;case 37:this._shift(a,"left");break;case 38:this._shift(a,"up");break;case 39:this._shift(a,"right");break;case 40:this._shift(a,"down");break;default:!0===this.s.enable&&this._emitEvent("key",[c,a.keyCode,this.s.lastFocus,a])}}}},_scroll:function(a,b,d,c){var c=d[c](),f=d.outerHeight(),d=d.outerWidth(),e=b.scrollTop(),h=b.scrollLeft(),
i=a.height(),a=a.width();c.top<e&&b.scrollTop(c.top);c.left<h&&b.scrollLeft(c.left);c.top+f>e+i&&b.scrollTop(c.top+f-i);c.left+d>h+a&&b.scrollLeft(c.left+d-a)},_shift:function(a,b,d){var c=this.s.dt,f=c.page.info(),j=f.recordsDisplay,h=this.s.lastFocus,i=this._columns();if(h){var g=c.rows({filter:"applied",order:"applied"}).indexes().indexOf(h.index().row);f.serverSide&&(g+=f.start);c=c.columns(i).indexes().indexOf(h.index().column);f=i[c];"right"===b?c>=i.length-1?(g++,f=i[0]):f=i[c+1]:"left"===
b?0===c?(g--,f=i[i.length-1]):f=i[c-1]:"up"===b?g--:"down"===b&&g++;0<=g&&g<j&&-1!==e.inArray(f,i)?(a.preventDefault(),this._focus(g,f)):!d||!this.c.blurable?a.preventDefault():this._blur()}},_tabInput:function(){var a=this,b=this.s.dt,d=null!==this.c.tabIndex?this.c.tabIndex:b.settings()[0].iTabIndex;if(-1!=d)e('<div><input type="text" tabindex="'+d+'"/></div>').css({position:"absolute",height:1,width:0,overflow:"hidden"}).insertBefore(b.table().node()).children().on("focus",function(){a._focus(b.cell(":eq(0)",
{page:"current"}))})}});l.defaults={blurable:!0,className:"focus",columns:"",editor:null,focus:null,keys:null,tabIndex:null};l.version="2.1.0";e.fn.dataTable.KeyTable=l;e.fn.DataTable.KeyTable=l;g.Api.register("cell.blur()",function(){return this.iterator("table",function(a){a.keytable&&a.keytable.blur()})});g.Api.register("cell().focus()",function(){return this.iterator("cell",function(a,b,d){a.keytable&&a.keytable.focus(b,d)})});g.Api.register("keys.disable()",function(){return this.iterator("table",
function(a){a.keytable&&a.keytable.enable(!1)})});g.Api.register("keys.enable()",function(a){return this.iterator("table",function(b){b.keytable&&b.keytable.enable(a===n?!0:a)})});g.ext.selector.cell.push(function(a,b,d){var b=b.focused,a=a.keytable,c=[];if(!a||b===n)return d;for(var f=0,e=d.length;f<e;f++)(!0===b&&a.focused(d[f])||!1===b&&!a.focused(d[f]))&&c.push(d[f]);return c});e(j).on("preInit.dt.dtk",function(a,b){if("dt"===a.namespace){var d=b.oInit.keys,c=g.defaults.keys;if(d||c)c=e.extend({},
d,c),!1!==d&&new l(b,c)}});return l});
